package leetcode.editor.week.week301;

// 2337. 移动片段得到字符串
// https://leetcode.cn/problems/move-pieces-to-obtain-a-string/
public class Solution6114 {
    // 首先，无论怎么移动，由于 L 和 R 无法互相穿过对方，那么去掉 _ 后的剩余字符应该是相同的，否则返回 false。
    // 然后用双指针遍历 start[i] 和 target[j]，分类讨论：
    //  如果当前为L，如果i < j，因为L无法向右移动，所以返回false
    //  同理，如果当前为R，如果i > j，因为R无法向左移动，所以返回false

    public boolean canChange(String start, String target) {
        // 如果去掉_不相等，那么该字符串不匹配
        if (!start.replaceAll("_", "").equals(target.replaceAll("_", ""))) return false;
        for (int i = 0, j = 0; i < start.length(); i++) {
            // 等于 _ 跳过，找到L 或者 R 才进行匹配
            if (start.charAt(i) == '_') continue;
            while (target.charAt(j) == '_') j++;
            // 简写
            // if (i != j && (start.charAt(i) == 'L') != (i > j)) return false;
            if (i != j) {
                if (start.charAt(i) == 'L' && i < j) return false;
                if (start.charAt(i) == 'R' && i > j) return false;
            }
            j++;
        }

        return true;
    }
}
